// vuex的配置文件
// 引入依赖
import Vue from 'vue'
import Vuex from 'vuex'
import mutations from './mutations'
import actions from './actions'
import moduleA from './moduleA'
import moduleB from './moduleB'
// 使用中间件
Vue.use(Vuex)

// 创建实例
const store = new Vuex.Store({
  // 初始化数据状态，类似组件的data
  // 唯一数据源：SSOT
  state: {
    age: 18,
    money: 0,
    point: 0,
    level: 1
  },
  // 通过state计算出来新的数据，类似组件的计算属性
  // 依赖缓存；数据变化也会自动更新
  getters: {
    nextAge(state) {
      console.log('getters');
      return state.age + 1
    }
  },
  // 修改数据的唯一方式,只能是同步操作，通过commit调用，类似组件的methods
  mutations: mutations,
  // 可以异步的修改数据，但不能直接修改，通过dispatch调用，类似组件的methods
  actions: actions,
  // 模块化，一个模块就是一个完整的结构，包含state、getters、mutations、actions
  // 拆分的依据，可以根据业务模块拆分
  modules: {
    a: moduleA,
    b: moduleB
  }
})

// 暴露
export default store